// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_MIDI_USB_MIDI_JACK_H_
#define MEDIA_MIDI_USB_MIDI_JACK_H_

#include <stdint.h>

#include "media/midi/usb_midi_export.h"

namespace midi {

class UsbMidiDevice;

// UsbMidiJack represents an EMBEDDED MIDI jack.
struct USB_MIDI_EXPORT UsbMidiJack {
    // The direction of the endpoint associated with an EMBEDDED MIDI jack.
    // Note that an IN MIDI jack associated with an OUT endpoint has
    // ***DIRECTION_OUT*** direction.
    enum Direction {
        DIRECTION_IN,
        DIRECTION_OUT,
    };
    UsbMidiJack(UsbMidiDevice* device,
        uint8_t jack_id,
        uint8_t cable_number,
        uint8_t endpoint_address)
        : device(device)
        , jack_id(jack_id)
        , cable_number(cable_number)
        , endpoint_address(endpoint_address)
    {
    }
    // Not owned
    UsbMidiDevice* device;
    // The id of this jack unique in the interface.
    uint8_t jack_id;
    // The cable number of this jack in the associated endpoint.
    uint8_t cable_number;
    // The address of the endpoint that this jack is associated with.
    uint8_t endpoint_address;

    Direction direction() const
    {
        return (endpoint_address & 0x80) ? DIRECTION_IN : DIRECTION_OUT;
    }
    uint8_t endpoint_number() const { return (endpoint_address & 0xf); }
};

} // namespace midi

#endif // MEDIA_MIDI_USB_MIDI_JACK_H_
